% Autore: Mattia Coccato
% Argomenti: discussione sugli strumenti impiegati per il progetto


\chapter{Descrizione degli strumenti impiegati}
\label{chStrumenti}

Per lo svolgimento del progetto si è reso necessario l'utilizzo di diversi strumenti tecnici, sia per fornire funzionalità quali la stampa biglietti, sia per mantenere organizzato ed organico il lavoro di gruppo.

\section{Sistema di \emph{versioning}: Subversion}
\label{parSVN}
La funzione principale per l'organizzazione del lavoro, nonché per permettere al gruppo di lavorare in sedi autonome, è stata assolta dal sistema di versioning  \emph{Subversion}\footnote{\url{http://subversion.apache.org/}} (meglio noto nella sua abbreviazione \emph{svn}) fornito da Apache Software Foundation, che permette la sincronizzazione in un server dei vari file, tenendo conto ad ogni \emph{revisione} dei cambiamenti apportati da ogni sviluppatore.

Per il nostro progetto abbiamo utilizzato i server di Google Code\footnote{\url{http://code.google.com}}, servizio gratuito offerto dall'azienda di Mountain View, a seguito di alcuni problemi di affidabilità avuti con l'omologo servizio attivo all'interno dell'Università di Padova, nel Dipartimento di Ingegneria; lato client invece si è impiegato TortoiseSVN\footnote{\url{http://tortoisesvn.net/}} in ambiente Windows e RapidSVN\footnote{\url{http://www.rapidsvn.org/}} in workstation Linux. Tutti i software segnalati sono gratuiti.

\section{Automazione dello Sviluppo: Apache Maven}
\label{parMaven}
\emph{Maven}\footnote{\url{http://maven.apache.org/}} è un applicativo fornito da Apache Software Foundation con licenza libera, che permette l'automatizzazione di tutte le fasi di gestione delle dipendenze -- Maven è altresì definito \emph{aggregatore di conoscenze} --, scaricamento delle librerie aggiornate, compilazione dei sorgenti e creazione dei pacchetti applicativi finali, pronti per la distribuzione, il tutto con il supporto a diversi linguaggi di programmazione oltre a Java da noi impiegato.
Maven ci ha permesso una notevole semplicità di compilazione e creazione del pacchetto applicativo, sebbene la fase di configurazione iniziale non sia stata delle più semplici; il risparmio di tempo permesso dalla risoluzione automatica delle dipendenze dei pacchetti software aggiunti è però stato rilevante. In un ambiente di produzione anche la configurazione iniziale sarebbe più agevole poiché è in gran parte portabile nei vari progetti, richiedendo per ognuno solamente piccole modifiche; in tali ambienti è utile anche adottare sistemi di \emph{caching} dei pacchetti, onde evitare di doverli ad ogni progetto riscaricare dai rispettivi siti dei produttori. Altrettanto importante in un ambito produttivo è la  gestione organica all'interno delle aziende dei propri moduli software che possono essere impiegati in altre applicazioni future. Il sistema scelto per tali scopi dai Sistemisti del Dipartimento è \emph{Artifactory}\footnote{\url{http://www.jfrog.com/home/v_artifactory_opensource_overview}}.

\section{Servlet Container: Apache Tomcat}
\label{parTomcat}
Altro applicativo impiegato è stato \emph{Tomcat}, anch'esso fornito da Apache Software Foundation, necessario per  contenere e servire le \emph{Servlet}, classi Java contenenti del codice che viene eseguito a seguito di una richiesta HTTP ad un indirizzo loro mappato, nonché pagine JSP (Java Server Page), che permettono l'aggiunta di funzionalità dinamiche ed elaborazione di dati lato server alle pagine HTML altrimenti statiche. Le pagine JSP costituiscono l'elemento di interazione con l'utente (ossia assumono il ruolo di \emph{vista} nel modello \emph{MVC}), mentre le servlet operano materialmente con i dati e con il database (assumono quindi il ruolo di \emph{controllore}).

Gli strumenti in questo paragrafo cooperano in sinergia per fornire quel che in gergo vengono chiamate \emph{web application}, ossia portali accessibili mediante i normali browser che però hanno funzioni che vanno al di là delle normali pagine statiche di contenuti, ma permettono l'interazione con l'utente e la fornitura di servizi; rientrano in questa definizione praticamente tutti i siti ``Web 2.0'', quali portali di acquisto on line, forum, blog, nonché i famossimi Facebook e Twitter.

La nostra applicazione abbisogna delle elaborazioni lato server per permettere l'inserimento dei dati dei film e della programmazione, nonché costruire dinamicamente i contenuti delle pagine, dipendendo questi ultimi dai dati precedentemente inseriti dai gestori del cinema Hesperia e dall'interazione degli utenti con il sito (l'acquisto dei biglietti e l'inserimento dei commenti).

\section{Il Database: PostgreSQL}
\label{parPostgre}
Il ruolo centrale di una web application è certamente costituito dal database, entità necessaria per la memorizzazione efficiente ed organizzata dei dati; continuando nella filosofia di utilizzo di software liberi, la scelta è ricaduta su \emph{PostgreSQL}\footnote{\url{http://www.postgresql.org}}, notissimo ed affidabile database relazionale open source. Tra le alternative non commerciali un altro progetto degno di nota è MySQL, che tuttavia non garantisce la medesima affidabilità e consistenza dei dati, pur per certi ambiti rivelandosi più agile. Dovendo trattare dati necessari ad un esercizio commerciale si è ritenuto più opportuno utilizzare una soluzione collaudata e sicura.

\section{Interazione lato Client: jQuery e altri componenti JavaScript}
\label{parjQuery}
Per fornire ai clienti un'esperienza di uso più piacevole e fluida si sono utilizzati in molte aree script JavaScript che permettessero, sfruttando il framework \emph{jQuery}\footnote{\url{http://jquery.com}}, l'elaborazione dinamica dei contenuti mostrati, anche ricorrendo ad elaborazioni client-server asincrone (\emph{AJAX} - Asynchronous JavaScript and XML), che consentono di modificare una parte del DOM (Document Object Model) della pagina corrente senza doverla ricaricare e far attendere l'utente, diminuendo nel contempo il carico sul servente web e sulla rete.

Per alcune aree si è fatto uso di JSON, una codifica leggera per collezioni composte da chiavi e valori ad essa associate, molto comodo per esempio per trasferire dal server alla pagina web client il contenuto di una form inviando solamente i dati, senza dover ricostruire nella servlet tutta la definizione in linguaggio HTML della stessa.

La pagina di apertura ospita uno \emph{slider}, componente che permette di far scorrere in sequenza le locandine dei prossimi eventi; a tale scopo abbiamo usato \emph{Simple Controls Gallery v1.4}\footnote{\url{http://www.dynamicdrive.com/dynamicindex4/simplegallery.htm}}, compatibile con i più diffusi browser.

Per dare una migliore apparenza al nostro sito abbiamo optato per un tema di base\footnote{\url{http://css-free-templates.com/dark/dark-semi-transparent-free-css-website-template/}}, anche se pesantemente nel seguito modificato per adattarlo alle nostre esigenze; abbiamo provveduto anche alla creazione di un nuovo logo per il Cinema Hesperia, attualmente utilizzato nel nostro portale.

\section{La stampa dei biglietti: JasperReports}
\label{parJasper}
Il progetto prevede la fornitura all'utente di biglietti per l'ingresso al cinema; per permetterne una gestione agevole sia da parte del cliente, così da far avere un layout sempre consistente indipendente dai caratteri o dalle impostazioni di stampa, nonché dagli addetti alle barriere in ingresso, che abbisognano di codici a barre per sveltire le procedure di riconoscimento dei titoli di ingresso, si è reso praticamente obbligatorio l'uso di strumenti che permettessero la generazione di documenti PDF on-the-fly partendo dai dati inseriti nel database, che l'utente può archiviare o stampare direttamente. La soluzione la fornisce la libreria \emph{JasperReports}\footnote{\url{http://community.jaspersoft.com/project/jasperreports-library}}, sviluppata da JasperSoft, open source e ad uso gratuito. Il suo impiego è abbastanza facile, in quanto per il riempimento dei report si rendono necessarie pochissime linee di codice, riportate di seguito; per la realizzazione del modello di report, che altro non è che un documento XML, ci si può avvalere dell'editor grafico \emph{iReport}, pubblicato dalla medesima azienda, che permette la creazione mediante "drag \& drop" di componenti di report anche complessi in poco tempo.

Per la corretta compilazione e risoluzione delle dipendenze da parte di Maven è stato necessario aggingere la repository specifica di JasperSoft nel pom.xml del progetto.

\pagebreak

\lstset{language=Java, keywordstyle=\color{javapurple}\bfseries, stringstyle=\color{javared}, commentstyle=\color{javagreen}, morecomment=[s][\color{javadocblue}]{/**}{*/}}
\begin{lstlisting}[label=use-jasper,caption=Codice di esempio per l'uso JasperReports]
//Costruisco la mappa dei parametri usati dal report
HashMap<String, Object> parametri = new HashMap<String, Object>();

//Va popolata in base ai parametri definiti nel report stesso
parametri.put("chiave", valore);

//con e' la connessione al database
JasperPrint jasperPrint = JasperFillManager.fillReport(reportFileName, parametri, con);
JasperExportManager.exportReportToPdfStream(jasperPrint, outstream);
\end{lstlisting}

\begin{figure}[h!]
  \caption{Stampa di esempio dei biglietti}
  \centering
    \includegraphics[width=0.75\textwidth, trim=1.5cm 16cm 1.5cm 2cm, clip=true]{img/biglietti}
\end{figure}